/**
    Copyright (C) 2011  Alexander Vollmer

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package org.jefb.service.impl;

import java.util.List;

import org.jefb.dao.ICommonDao;
import org.jefb.entity.DestinationEntity;
import org.jefb.entity.FileDestEntity;
import org.jefb.entity.FileEntity;
import org.jefb.entity.dto.TransmissionStatus;
import org.jefb.service.ITransmissionStatusService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

@Service
public class TransmissionStatusService implements ITransmissionStatusService {
	
	private static Logger log = LoggerFactory.getLogger(TransmissionStatusService.class);

	@Autowired
	private ICommonDao commonDAO;

	@Transactional(readOnly=false,propagation = Propagation.REQUIRED)
	public TransmissionStatus getTransmissionStatus(FileEntity fileEntity,
			DestinationEntity destinationEntity) {
		FileDestEntity example = new FileDestEntity();
		
		example.setFileId(fileEntity.getId());
		example.setDestId(destinationEntity.getId());

		TransmissionStatus transmissionStatus = new TransmissionStatus();
		List<FileDestEntity> foundFileDestEntity = getCommonDAO().findByExample(
				 example, "transmitted", "offset");
		if (!foundFileDestEntity.isEmpty()) {
			FileDestEntity fileDestEntity = foundFileDestEntity.get(0);
			transmissionStatus.setTransmitted(fileDestEntity.getTransmitted());
			transmissionStatus.setTransmittedOffset(fileDestEntity.getOffset());
			Long percent = fileDestEntity.getOffset() * 100
					/ fileDestEntity.getFile().getSize();
			transmissionStatus.setTransmittedPercent(percent);
		} else {
			// TODO
			transmissionStatus.getErrorMessages().add("Status unknown.");
		}
		return transmissionStatus;
	}

	public void setCommonDAO(ICommonDao commonDAO) {
		this.commonDAO = commonDAO;
	}

	public ICommonDao getCommonDAO() {
		return commonDAO;
	}

}
